package org.aplombh.java.awcing.basic.greedy.sectionProblem;

import org.aplombh.java.utils.Pair;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * 给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t]，请你选择尽量少的区间，将指定线段区间完全覆盖。
 * <p>
 * 输出最少区间数，如果无法完全覆盖则输出 −1。
 * <p>
 * 输入格式
 * 第一行包含两个整数 s 和 t，表示给定线段区间的两个端点。
 * <p>
 * 第二行包含整数 N，表示给定区间数。
 * <p>
 * 接下来 N 行，每行包含两个整数 ai,bi，表示一个区间的两个端点。
 * <p>
 * 输出格式
 * 输出一个整数，表示所需最少区间数。
 * <p>
 * 如果无解，则输出 −1。
 * <p>
 * 数据范围
 * 1≤N≤105,
 * −109≤ai≤bi≤109,
 * −109≤s≤t≤109
 * 输入样例：
 * 1 5
 * 3
 * -1 3
 * 2 4
 * 3 5
 * 输出样例：
 * 2
 */
public class MergeSection_907 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" ");
        int start = Integer.parseInt(s[0]);
        int end = Integer.parseInt(s[1]);
        int n = Integer.parseInt(reader.readLine());
        MergeSection ms = new MergeSection(n);
        for (int i = 0; i < n; i++) {
            s = reader.readLine().split(" ");
            ms.range[i] = new Pair(Integer.parseInt(s[0]), Integer.parseInt(s[1]));
        }
        ms.solve(start, end);
        reader.close();
    }
}

class MergeSection {
    private static final int N = 100010;
    Pair[] range = new Pair[N];
    int n;

    public MergeSection(int n) {
        this.n = n;
    }

    public void solve(int start, int end) {
        int res = 0;
        // 按照左端点排序
        Arrays.sort(range, 0, n);
        boolean flag = false;
        for (int i = 0; i < n; i++) {
            int r = (int) -1e9;
            int j = i;

            // 找到左端点在所需区间左边的区间中的右端点最大的点
            while (j < n && range[j].l <= start) {
                r = Math.max(r, range[j].r);
                j++;
            }

            // 如果左端点在所需区间左边的右端点最大的点都比start小
            // 说明无满足条件
            if (r < start) {
                System.out.println(-1);
                return;
            }

            // 所需区间数加一
            System.out.println(range[j - 1].l + "->" + range[j - 1].r);
            res++;
            // 如果r大于end说明已经全部找到
            if (r >= end) {
                flag = true;
                break;
            }

            // 将左端点置为找到区间的右端点
            start = r;

            // 将i置为当前节点
            i = j - 1;
        }
        if (flag) {
            System.out.println(res);
        } else {
            System.out.println(-1);
        }
    }
}
